/*
 * Файл first.c
 *
 * Програма створює 5 потоків за допомогою процедури pthread_create(). 
 * Кожен потік друкує повідомлення «Hello World!», а тоді завершується 
 * зверненням до процедури pthread_exit(). 
 * 
 * Компіляція 
 * gcc -pthread first.c -Wall --pedantic -o first
 * 
 * Виконання
 * ./first
 *
 */
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS     5

void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;
   long pthreadID = (long)pthread_self();
   printf("Hello World! It's me, thread #%ld, psID #%ld\n", tid,pthreadID);
   sleep(300);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;
   for(t=0; t<NUM_THREADS; t++){
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);

      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
         exit(-1);
      }
   }

   /* Last thing that main() should do */
   pthread_exit(NULL);
}
